﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static List<TabelaAvulsoVO> getTabelaAvulsos()
        {
            return getTabelaAvulsos(null, null);
        }

        public static List<TabelaAvulsoVO> getTabelaAvulsos(DateTime? vigenciaInicial, DateTime? vigenciaFinal)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT ta.IdTabelaAvulso, ta.IdHorario, h.Controle, ta.TabelaAvulso, ta.InicioVigencia, ta.FimVigencia, ta.Segunda, ta.Terca, ta.Quarta, ta.Quinta, ta.Sexta, ta.Sabado, ta.Domingo, ta.Feriados, ta.OutrasDatas, ta.Diaria, ta.DiariaEspecial ");
            query.AppendLine("FROM tabelaavulso ta LEFT JOIN horario h on ta.IdHorario = h.IdHorario ");
            if (vigenciaInicial != null && vigenciaFinal!=null)
                query.AppendLine("WHERE ta.InicioVigencia <= DATE(?VigenciaFinal) AND ta.FimVigencia >= DATE(?VigenciaInicial) ");
            else if (vigenciaInicial != null)
                query.AppendLine("WHERE DATE(?VigenciaInicial) BETWEEN ta.InicioVigencia AND ta.FimVigencia ");
            else if (vigenciaFinal != null)
                query.AppendLine("WHERE DATE(?VigenciaFinal) BETWEEN ta.InicioVigencia AND ta.FimVigencia ");
            query.AppendLine("ORDER BY InicioVigencia DESC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (vigenciaInicial != null) cmd.Parameters.AddWithValue("?VigenciaInicial", vigenciaInicial.Value);
            if (vigenciaFinal != null) cmd.Parameters.AddWithValue("?VigenciaFinal", vigenciaFinal.Value);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<TabelaAvulsoVO> listTabelaAvulso = new List<TabelaAvulsoVO>();

                while (reader.Read())
                {
                    TabelaAvulsoVO tabelaAvulsoVO = TabelaAvulsoVO.CreateTabelaAvulsoVO();
                    tabelaAvulsoVO.idTabelaAvulso = reader.GetInt32("IdTabelaAvulso");
                    tabelaAvulsoVO.horarioVO.idHorario = reader.GetInt32("IdHorario");
                    tabelaAvulsoVO.horarioVO.controle = reader.GetString("Controle");
                    tabelaAvulsoVO.tabelaAvulso = reader.GetString("TabelaAvulso");
                    tabelaAvulsoVO.inicioVigencia = reader.GetDateTime("InicioVigencia");
                    tabelaAvulsoVO.fimVigencia = reader.GetDateTime("FimVigencia");
                    tabelaAvulsoVO.segunda = reader.GetBoolean("Segunda");
                    tabelaAvulsoVO.terca = reader.GetBoolean("Terca");
                    tabelaAvulsoVO.quarta = reader.GetBoolean("Quarta");
                    tabelaAvulsoVO.quinta = reader.GetBoolean("Quinta");
                    tabelaAvulsoVO.sexta = reader.GetBoolean("Sexta");
                    tabelaAvulsoVO.sabado = reader.GetBoolean("Sabado");
                    tabelaAvulsoVO.domingo = reader.GetBoolean("Domingo");
                    tabelaAvulsoVO.feriados = reader.GetBoolean("Feriados");
                    tabelaAvulsoVO.outrasDatas = reader.GetBoolean("OutrasDatas");
                    tabelaAvulsoVO.diaria = reader.GetDecimal("Diaria");
                    tabelaAvulsoVO.diariaEspecial = reader.GetDecimal("DiariaEspecial");

                    listTabelaAvulso.Add(tabelaAvulsoVO);
                }
                reader.Close();
                return listTabelaAvulso;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setTabelaAvulso(TabelaAvulsoVO tabelaAvulsoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE tabelaavulso ");
            query.AppendLine("SET IdTabelaAvulso=?IdTabelaAvulso, IdHorario=?IdHorario, TabelaAvulso=?TabelaAvulso, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Segunda=?Segunda, Terca=?Terca, Quarta=?Quarta, Quinta=?Quinta, Sexta=?Sexta, Sabado=?Sabado, Domingo=?Domingo, Feriados=?Feriados, OutrasDatas=?OutrasDatas, Diaria=?Diaria, DiariaEspecial=?DiariaEspecial ");
            query.AppendLine("WHERE IdTabelaAvulso=?IdTabelaAvulso ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaAvulso", tabelaAvulsoVO.idTabelaAvulso);
            cmd.Parameters.AddWithValue("?IdHorario", tabelaAvulsoVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaAvulso", tabelaAvulsoVO.tabelaAvulso);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaAvulsoVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaAvulsoVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Segunda", tabelaAvulsoVO.segunda);
            cmd.Parameters.AddWithValue("?Terca", tabelaAvulsoVO.terca);
            cmd.Parameters.AddWithValue("?Quarta", tabelaAvulsoVO.quarta);
            cmd.Parameters.AddWithValue("?Quinta", tabelaAvulsoVO.quinta);
            cmd.Parameters.AddWithValue("?Sexta", tabelaAvulsoVO.sexta);
            cmd.Parameters.AddWithValue("?Sabado", tabelaAvulsoVO.sabado);
            cmd.Parameters.AddWithValue("?Domingo", tabelaAvulsoVO.domingo);
            cmd.Parameters.AddWithValue("?Feriados", tabelaAvulsoVO.feriados);
            cmd.Parameters.AddWithValue("?OutrasDatas", tabelaAvulsoVO.outrasDatas);
            cmd.Parameters.AddWithValue("?Diaria", tabelaAvulsoVO.diaria);
            cmd.Parameters.AddWithValue("?DiariaEspecial", tabelaAvulsoVO.diariaEspecial);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newTabelaAvulso(TabelaAvulsoVO tabelaAvulsoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO tabelaavulso ");
            query.AppendLine("SET IdHorario=?IdHorario, TabelaAvulso=?TabelaAvulso, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Segunda=?Segunda, Terca=?Terca, Quarta=?Quarta, Quinta=?Quinta, Sexta=?Sexta, Sabado=?Sabado, Domingo=?Domingo, Feriados=?Feriados, OutrasDatas=?OutrasDatas, Diaria=?Diaria, DiariaEspecial=?DiariaEspecial ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdHorario", tabelaAvulsoVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaAvulso", tabelaAvulsoVO.tabelaAvulso);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaAvulsoVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaAvulsoVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Segunda", tabelaAvulsoVO.segunda);
            cmd.Parameters.AddWithValue("?Terca", tabelaAvulsoVO.terca);
            cmd.Parameters.AddWithValue("?Quarta", tabelaAvulsoVO.quarta);
            cmd.Parameters.AddWithValue("?Quinta", tabelaAvulsoVO.quinta);
            cmd.Parameters.AddWithValue("?Sexta", tabelaAvulsoVO.sexta);
            cmd.Parameters.AddWithValue("?Sabado", tabelaAvulsoVO.sabado);
            cmd.Parameters.AddWithValue("?Domingo", tabelaAvulsoVO.domingo);
            cmd.Parameters.AddWithValue("?Feriados", tabelaAvulsoVO.feriados);
            cmd.Parameters.AddWithValue("?OutrasDatas", tabelaAvulsoVO.outrasDatas);
            cmd.Parameters.AddWithValue("?Diaria", tabelaAvulsoVO.diaria);
            cmd.Parameters.AddWithValue("?DiariaEspecial", tabelaAvulsoVO.diariaEspecial);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delTabelaAvulso(TabelaAvulsoVO tabelaAvulsoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM tabelaavulso ");
            query.AppendLine("WHERE IdTabelaAvulso=?IdTabelaAvulso ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaAvulso", tabelaAvulsoVO.idTabelaAvulso);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
